Міністерство освіти і науки УкраїниНаціональний технічний університет України
«Київський політехнічний інститут ім. І. Сікорського»
Кафедра автоматизації проектування енергетичних процесів і систем
Лабораторна робота №7
з дисципліни «Операційні системи»
«Система команд. Організація умовних переходів»
Мета роботи
Вивчення команд умовних переходів і способів їх використання в асемблерних програмах для реалізації розгалужень в обчисленнях.
Теоретичні відомості
Команди переходу забезпечують безумовні переходи усередині поточного кодового сегменту (внутрішній перехід) або з поточного сегменту в інший кодовий сегмент (зовнішній або міжсегментний перехід). Всі ці переходи реалізуються за допомогою команди JMP, яка має формат
JMP [type] OPR
де type - тип переходу: SHORT (короткий), NEAR (ближній) або FAR (дальній), за замовчуванням приймається NEAR;
OPR - ім'я, мітка або адресний вираз. Залежно від типу переходу (type) і/або структури операнда OPR можна виділити 5 видів команд безумовного переходу, з яких три визначають внутрішньосегментні переходи, а дві - міжсегментні переходи.
JMP SHORT label ; короткий перехід в межах -128...+127
; байт відносно адреси наступної команди
JMP [NEAR PTR] label ; внутрішньосегментний прямий перехід
; по зсуву відносно мітки label
JMP [NEAR PTR] opr ; внутрішньосегментний непрямий перехід
; opr - регістр або слово в пам'яті, де
; міститься адреса переходу
JMP [FAR PTR] label ; міжсегментний прямий перехід за
; адресою (Seg: Offset) мітки label
JMP [FAR PTR] opr ; міжсегментний непрямий 9 (косвенний) перехід
; за адресою (Seg: Offset), записаною в пам'яті, на
; яку вказує операнд opr
Мітка label - це безпосередня мітка команди (ім'я із завершуючою двокрапкою) або мітка, визначена в кодовому сегменті за допомогою директиви LABEL. Операнд opr в командах непрямого переходу являє собою ім'я регістра, в якому міститься адреса переходу (тільки для внутрішніх переходів), або ім'я змінної, де записана адреса переходу (одне слово для внутрішньосегментного переходу або два слова для міжсегментного переходу), або ж адресний вираз, яким визначається адреса пам'яті, де зберігається адреса переходу. Слід підкреслити, що у разі внутрішньосегментного прямого переходу в команді зберігається не пряма адреса переходу (Offset), а зсув (Displacement) в байтах від наступної після JMP команди до мітки переходу, який складається з поточним вмістом IP при виконання команди JMP і тим самим робить вміст IP рівним цільовій адресі (Offset) переходу в поточному сегменті. Це дозволяє переміщати кодовий сегмент в пам'яті без корекції інформації про переходи. У разі прямих міжсегментних переходів в команді зберігається повна логічна адреса переходу (Seg: Offset), яка повинна коректуватися при переміщеннях сегменту, в якому знаходиться точка переходу.
Окрім розглянутих вище команд безумовного переходу, в системі команд х86 є 17 команд умовного переходу, які, як і команда JMP SHORT label, забезпечують короткий перехід в сегменті в діапазоні -128 ... +127 байтів відносно адреси наступної команди. Всі вони мають 2-байтний формат; причому в другому байті міститься зсув (ціле із знаком), який розширюється знаковим розрядом до слова і складається з вмістом IP, якщо на момент виконання команди задана її мнемокодом умова ВИКОНАНА, інакше цей зсув не додається до IP і, отже, перехід не здійснюється. Деякі команди умовних переходів мають два, а то і 3 різних мнемокоду, наприклад, команди JB, INAE і JC мають абсолютно ідентичний машинний код, але різне контекстне "наповнення" програми:
JB label ;обійти перехід, якщо "менше" (CF=l)
JNAE label ; обійти перехід, якщо "не менше і не дорівнюється" (CF=1)
JC label , обійти перехід, якщо виникло перенесення/заем,т. е. CF=
Програміст вибирає з цих трьох рівноцінних команд ту, яка на його думку краще відображає умову переходу. Команди умовного переходу використовуються після арифметичних, логічних і інших команд, що впливають на прапорці, д...